/*
 * @Author: wuyang
 * @Description: 登录页面验证规则
 * @Date: 2023-01-04 16:51:25
 * @LastEditors: wuyang
 * @LastEditTime: 2023-01-05 16:25:50
 * @FilePath: \vue-ts-vite\src\views\login\utils\rules.ts
 */
import { reactive } from 'vue';
import type { FormRules } from 'element-plus';
import { useUserStore } from '@/store/modules/user';

const userStore = useUserStore();

/** 账号正则（密码格式应为6-18位数字、字母、符号的任意两种组合） */
export const REGEXP_USERNAME = /^[a-zA-Z0-9_-]{4,16}$/;

/** 邮箱正则（密码格式应为6-18位数字、字母、符号的任意两种组合） */
export const REGEXP_EMAIL = /^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$/;

/** 密码正则（密码格式应为6-18位数字、字母、符号的任意两种组合） */
export const REGEXP_PWD =
	/^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?!([^(0-9a-zA-Z)]|[()])+$)(?!^.*[\u4E00-\u9FA5].*$)([^(0-9a-zA-Z)]|[()]|[a-z]|[A-Z]|[0-9]){6,18}$/;

/** 手机号正则 */
export const REGEXP_PHONE =
	/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/;

/** 登录校验 */
const loginRules = reactive(<FormRules>{
	/** 账号校验 */
	username: [
		{
			validator: (rule, value, callback) => {
				if (value === '') {
					callback(new Error('请输入账号'));
				} else if (!REGEXP_USERNAME.test(value)) {
					callback(new Error('请输入4到16位的账号,（字母，数字，下划线，减号）任意组合'));
				} else {
					callback();
				}
			},
			trigger: 'blur'
		}
	],

	// 密码校验
	password: [
		{
			validator: (rule, value, callback) => {
				if (value === '') {
					callback(new Error('请输入密码'));
				} else if (!REGEXP_PWD.test(value)) {
					callback(new Error('密码格式应为6-18位数字、字母、符号的任意两种组合'));
				} else {
					callback();
				}
			},
			trigger: 'blur'
		}
	],
	/** 验证码校验 */
	captcha: [
		{
			validator: (rule, value, callback) => {
				if (value === '') {
					callback(new Error('请输入4位验证码'));
				} else {
					if (value == userStore.captcha) {
						callback();
					} else {
						callback(new Error('验证码错误'));
					}
				}
			}
		}
	]
});

/** 注册校验 */
const registerRules = reactive(<FormRules>{
	/** 账号校验 */
	username: [
		{
			validator: (rule, value, callback) => {
				if (value === '') {
					callback(new Error('请输入账号'));
				} else if (!REGEXP_USERNAME.test(value)) {
					callback(new Error('请输入4到16位的账号,（字母，数字，下划线，减号）任意组合'));
				} else {
					callback();
				}
			},
			trigger: 'blur'
		}
	],
	/** 邮箱校验 */
	email: [
		{
			validator: (rule, value, callback) => {
				if (value === '') {
					callback(new Error('请输入邮箱'));
				} else if (!REGEXP_EMAIL.test(value)) {
					callback(new Error('请输入正确的邮箱格式'));
				} else {
					callback();
				}
			},
			trigger: 'blur'
		}
	],
	/** 密码校验 */
	password1: [
		{
			validator: (rule, value, callback) => {
				if (value === '') {
					callback(new Error('请输入密码'));
				} else if (!REGEXP_PWD.test(value)) {
					callback(new Error('密码格式应为6-18位数字、字母、符号的任意两种组合'));
				} else {
					callback();
				}
			},
			trigger: 'blur'
		}
	],
	/** 密码校验 */
	password2: [
		{
			validator: (rule, value, callback) => {
				if (value === '') {
					callback(new Error('请输入密码'));
				} else if (!REGEXP_PWD.test(value)) {
					callback(new Error('密码格式应为6-18位数字、字母、符号的任意两种组合'));
				} else {
					callback();
				}
			},
			trigger: 'blur'
		}
	],
	/** 验证码校验 */
	captcha: [
		{
			validator: (rule, value, callback) => {
				if (value.trim().length !== 6) {
					callback(new Error('请输入6位验证码'));
				} else {
					callback();
				}
			}
		}
	]
});

export { loginRules, registerRules };
